package modele;

import java.io.Serializable;
import java.util.ArrayList;

import codebase.IUnite;

public class Region implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public int num;
	private String nom;
	private String abreviation;
	private boolean ravitaillement;
	private Coordonnee coordoRavitaillement;
	private Coordonnee coordoUnite;
	private boolean terrestre;
	private IUnite occupant;
	// private Puissance proprietaire; surement pas besoin
	private ArrayList<Region> listFrontalier;

	public Region(String nom, String abreviation, boolean ravitaillement, boolean terrestre,
			int coordoRaviX, int coordoRaviY, int coordoUniteX, int coordoUniteY) {
		this.nom = nom;
		this.abreviation = abreviation;
		this.ravitaillement = ravitaillement;
		this.terrestre = terrestre;
		this.occupant = null;
		// this.proprietaire = null;
		this.listFrontalier = new ArrayList<Region>();
		this.coordoRavitaillement = new Coordonnee(coordoRaviX, coordoRaviY);
		this.coordoUnite = new Coordonnee(coordoUniteX, coordoUniteY);
	}

	public Region(String nom, String abreviation, boolean ravitaillement, boolean terrestre,
			Unite occupant, Puissance proprietaire) {
		this.nom = nom;
		this.abreviation = abreviation;
		this.ravitaillement = ravitaillement;
		this.terrestre = terrestre;
		this.occupant = occupant;
		// this.proprietaire = proprietaire;
		this.listFrontalier = new ArrayList<Region>();
	}

	public String getNom() {
		return nom;
	}

	public String getAbreviation() {
		return abreviation;
	}

	public boolean isRavitaillement() {
		return ravitaillement;
	}

	public boolean isTerrestre() {
		return terrestre;
	}

	public IUnite getOccupant() {
		return this.occupant;
	}

	public void setOccupant(IUnite p) {
		this.occupant = p;
	}

	public void addFrontalier(Region... regions) {
		for (Region r : regions) {
			this.listFrontalier.add(r);
		}
	}

	/**
	 * Retourne true si la région en paramètre est frontaliere avec la region
	 * this
	 * 
	 * @param region
	 *            de type Region
	 * @return Boolean
	 */
	public boolean isFrontalier(Region region) {
		for (Region r : this.listFrontalier) {
			if (region.getNom().equals(r.getNom())) {
				return true;
			}
		}
		return false;
	}

	public Coordonnee getCoordoRavitaillement() {
		return coordoRavitaillement;
	}

	public Coordonnee getCoordoUnite() {
		return coordoUnite;
	}

	public boolean equals(Region r) {
		return this.abreviation.equalsIgnoreCase(r.getAbreviation());
	}

	public String toString() {
		return "Region " + this.nom + "(" + this.abreviation + "). Pt ravitaillement : "
				+ this.ravitaillement + " Terre : " + this.terrestre + " Unite : " + occupant;
	}
}
